home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / util / wb / cachecontrol.lha / cc.c < prev    next >
C/C++ Source or Header  |  1994-06-19  |  5KB  |  212 lines

  1. /* CC.c */
  2.  
  3. /* Cachebits zeile 189 ff */
  4.  
  5. #include "sc:source/cc/cc-INCLUDES.h"
  6.  
  7. /* Version | Revisionscontrol */
  8.  
  9. #define    VERSION        1
  10. #define    REVISION    10
  11. #define    DATE        "__Date__"
  12. #define    VERS        "CacheControl 1.10"
  13. #define    VSTRING        "CacheControl 1.10 ("__DATE__")\n\r"
  14. #define    VERSTAG        "\0$VER: CacheControl 1.10 ("__DATE__")"
  15.  
  16.  
  17. void OpenAll(void);
  18. void CloseAll(void);
  19.  
  20. /* Externs */
  21.  
  22. extern struct ExecBase         *SysBase;
  23.  
  24. /* Globals */
  25.  
  26. UBYTE VersTag[]=VERSTAG;        /* Versionsstring */
  27. struct IntuitionBase    *IntuitionBase=0l;
  28. struct GfxBase             *GfxBase=0l;
  29. struct Library             *UtilityBase=0l,*DiskfontBase=0l;
  30. struct Screen            *scr=0l;
  31. struct Window            *win=0l;
  32. struct Gadget            *GList=0l;
  33. struct TextAttr         *sysfont=0l;
  34. ULONG oldbits,cachebits,cachemask;
  35. UBYTE icache,iburst,dcache,dburst,copyback;
  36.  
  37. struct TagItem wintags[]={
  38.     WA_Left,                50,
  39.     WA_Top,                    20,
  40.     WA_InnerWidth,            200,
  41.     WA_InnerHeight,            70,
  42.     WA_IDCMP,                IDCMP_CLOSEWINDOW|IDCMP_VANILLAKEY|BUTTONIDCMP,
  43.     WA_Flags,                WFLG_SMART_REFRESH|WFLG_ACTIVATE|WFLG_CLOSEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_GIMMEZEROZERO|WFLG_RMBTRAP,
  44.     WA_Title,                (ULONG *)"CacheControl V1.10",
  45.     WA_ScreenTitle,            (ULONG *)"CacheControl V1.10 (C) 1994 by ENSONIC of TRINOMIC",
  46.     WA_CustomScreen,        0l,
  47.     WA_Gadgets,                0l,
  48.     WA_PubScreenName,        0l,
  49.     WA_PubScreenFallBack,    TRUE,
  50.     TAG_DONE
  51. };
  52.  
  53. UBYTE *DCLabels[]={"DCache Off","DCache On",0l };
  54. UBYTE *DBLabels[]={"DBurst Off","DBurst On",0l };
  55. UBYTE *ICLabels[]={"ICache Off","ICache On",0l };
  56. UBYTE *IBLabels[]={"IBurst Off","IBurst On",0l };
  57. UBYTE *CBLabels[]={"CopyBack Off","CopyBack On",0l };
  58.  
  59. void OpenAll(void)
  60. {
  61.     WORD winx,winy,fonty,gwidth;
  62.     struct NewGadget ng;
  63.     struct Gadget *g;
  64.     APTR VisualInfo=0l;
  65.     struct RastPort *rp;
  66.     UWORD level,syslevel;
  67.  
  68.     syslevel=0;
  69.     level=SysBase->AttnFlags;
  70.     if(level&(1<<1)) syslevel=1;
  71.     if(level&(1<<2)) syslevel=2;
  72.     if(level&(1<<3)) syslevel=3;
  73.     if(!syslevel) exit(1);
  74.  
  75.     oldbits=CacheControl(0l,0l);
  76.     dcache=dburst=icache=iburst=copyback=0;
  77.     if(oldbits&(1L<< 8)) dcache=1;
  78.     if(oldbits&(1L<<12)) dburst=1;
  79.     if(oldbits&(1L<< 0)) icache=1;
  80.     if(oldbits&(1L<< 4)) iburst=1;
  81.     if(oldbits&(1L<<31)) copyback=1;
  82.  
  83.     if(!(IntuitionBase=OpenLibrary("intuition.library",37))) CloseAll();
  84.     if(!(GfxBase=OpenLibrary("graphics.library",37))) CloseAll();
  85.     if(!(UtilityBase=OpenLibrary("utility.library",37))) CloseAll();
  86.  
  87.     if(!(scr=LockPubScreen(0l))) CloseAll();
  88.     sysfont=scr->Font;
  89.     rp=&scr->RastPort;
  90.     fonty=max(11,(sysfont->ta_YSize+4));
  91.     winy=(syslevel*fonty)+5;
  92.     gwidth=TextLength(rp,CBLabels[0],strlen(CBLabels[0]))+30;
  93.     winx=gwidth+gwidth+10;
  94.  
  95.     if(!(VisualInfo=GetVisualInfo(scr,TAG_DONE))) CloseAll();
  96.  
  97.     if(!(g=CreateContext(&GList))) CloseAll();
  98.  
  99.     if(syslevel>0)
  100.     {
  101.         ng.ng_LeftEdge        =4;
  102.         ng.ng_TopEdge        =2;
  103.         ng.ng_Width            =gwidth;
  104.         ng.ng_Height        =fonty;
  105.         ng.ng_GadgetText    ="";
  106.         ng.ng_TextAttr        =sysfont;
  107.         ng.ng_GadgetID        =0;
  108.         ng.ng_Flags            =PLACETEXT_LEFT;
  109.         ng.ng_VisualInfo    =VisualInfo;
  110.         g=CreateGadget(CYCLE_KIND,g,&ng,GTCY_Labels,&DCLabels,GTCY_Active,dcache,TAG_DONE);
  111.  
  112.         ng.ng_LeftEdge        =gwidth+6;
  113.         ng.ng_GadgetID        =1;
  114.         g=CreateGadget(CYCLE_KIND,g,&ng,GTCY_Labels,&DBLabels,GTCY_Active,dburst,TAG_DONE);
  115.     }
  116.     if(syslevel>1)
  117.     {
  118.         ng.ng_LeftEdge        =4;
  119.         ng.ng_TopEdge        =2+(fonty+1);
  120.         ng.ng_GadgetID        =2;
  121.         g=CreateGadget(CYCLE_KIND,g,&ng,GTCY_Labels,&ICLabels,GTCY_Active,icache,TAG_DONE);
  122.  
  123.         ng.ng_LeftEdge        =gwidth+6;
  124.         ng.ng_GadgetID        =3;
  125.         g=CreateGadget(CYCLE_KIND,g,&ng,GTCY_Labels,&IBLabels,GTCY_Active,iburst,TAG_DONE);
  126.     }
  127.     if(syslevel>2)
  128.     {
  129.         ng.ng_LeftEdge        =4;
  130.         ng.ng_TopEdge        =2+(fonty+1)+(fonty+1);
  131.         ng.ng_GadgetID        =4;
  132.         g=CreateGadget(CYCLE_KIND,g,&ng,GTCY_Labels,&CBLabels,GTCY_Active,copyback,TAG_DONE);
  133.     }
  134.  
  135.     wintags[2].ti_Data=winx;
  136.     wintags[3].ti_Data=winy;
  137.     wintags[8].ti_Data=scr;
  138.     wintags[9].ti_Data=GList;
  139.     if(!(win=OpenWindowTagList(0l,wintags))) CloseAll();
  140.  
  141.     UnlockPubScreen(0l,scr);
  142. }
  143.  
  144.  
  145. void CloseAll(void)
  146. {
  147.     if(win)                CloseWindow(win);
  148.     if(UtilityBase)        CloseLibrary(UtilityBase);
  149.     if(GfxBase)            CloseLibrary(GfxBase);
  150.     if(IntuitionBase)    CloseLibrary(IntuitionBase);
  151.     exit(1);
  152. }
  153.  
  154. void main()
  155. {
  156.     struct IntuiMessage *imsg;
  157.     ULONG iclass;
  158.     APTR iadr;
  159.     USHORT icode;
  160.     UBYTE quit=0;
  161.  
  162.     OpenAll();
  163.     while(!quit)
  164.     {
  165.         WaitPort(win->UserPort);
  166.         while(imsg=GT_GetIMsg(win->UserPort))
  167.         {
  168.             iclass    =imsg->Class;
  169.             iadr    =imsg->IAddress;
  170.             icode    =imsg->Code;
  171.             GT_ReplyIMsg(imsg);
  172.             switch(iclass)
  173.             {
  174.                 case IDCMP_GADGETUP:
  175.                     switch((int)(((struct Gadget *)iadr)->GadgetID))
  176.                     {
  177.                         case 0:        /* DCache On/Off */
  178.                             if(icode) cachebits=cachemask=(1L<<8);
  179.                             else { cachebits=0;cachemask=(1L<<8); }
  180.                             CacheControl(cachebits,cachemask);
  181.                             break;
  182.                         case 1:        /* DBurst On/Off */
  183.                             if(icode) cachebits=cachemask=(1L<<12);
  184.                             else { cachebits=0;cachemask=(1L<<12); }
  185.                             CacheControl(cachebits,cachemask);
  186.                             break;
  187.                         case 2:        /* ICache On/Off */
  188.                             if(icode) cachebits=cachemask=1L;
  189.                             else { cachebits=0;cachemask=1L; }
  190.                             CacheControl(cachebits,cachemask);
  191.                             break;
  192.                         case 3:        /* IBurst On/Off */
  193.                             if(icode) cachebits=cachemask=(1L<<4);
  194.                             else { cachebits=0;cachemask=(1L<<4); }
  195.                             CacheControl(cachebits,cachemask);
  196.                             break;
  197.                         case 4:        /* CopyBack On/Off */
  198.                             if(icode) cachebits=cachemask=(1L<<31);
  199.                             else { cachebits=0;cachemask=(1L<<31); }
  200.                             CacheControl(cachebits,cachemask);
  201.                             break;
  202.                     }
  203.                     break;
  204.                 case IDCMP_CLOSEWINDOW:
  205.                     quit=1;break;
  206.             }
  207.         }
  208.  
  209.     }
  210.     CloseAll();
  211. }
  212.